/**
 * 周赛题
 * 给你两个整数：m 和 n ，表示矩阵的维数。
 *
 * 另给你一个整数链表的头节点 head 。
 *
 * 请你生成一个大小为 m x n 的螺旋矩阵，矩阵包含链表中的所有整数。链表中的整数从矩阵 左上角 开始、顺时针 按 螺旋 顺序填充。如果还存在剩余的空格，则用 -1 填充。
 *
 * 返回生成的矩阵。
 *
 *https://leetcode.cn/contest/weekly-contest-300/problems/spiral-matrix-iv/
 * 思路：顺时针遍历矩阵
 */
class SpiralMatrix {
    public int[][] spiralMatrix(int m, int n, ListNode head) {
       int[][] matrix=new int[m][n];
        int left=0;
        int right=n-1;
        int top=0;
        int buttom=m-1;
        while(true){
            for(int i=left;i<=right;i++){
                if(head!=null){
                      matrix[top][i]=head.val;
                    head=head.next;
                }else{
                    matrix[top][i]=-1;
                }
            }
            top++;
            if(top>buttom)
                break;
            for(int i=top;i<=buttom;i++){
                if(head!=null){
                    matrix[i][right]=head.val;
                    head=head.next;
                }else{
                     matrix[i][right]=-1;
                }
            }
            right--;
             if(left > right) break;
            for(int i=right;i>=left;i--){
                if(head!=null){
                    matrix[buttom][i]=head.val;
                    head=head.next;
                }else{
                     matrix[buttom][i]=-1;
                }
            }
             buttom--;
            if(top > buttom) break;
            for(int i=buttom;i>=top;i--){
                 if(head!=null){
                    matrix[i][left]=head.val;
                    head=head.next;
                }else{
                     matrix[i][left]=-1;
                }
            }
             left++;
            if(left > right) break;
        }
        return matrix;
    }
}